package com.tdam2011.grupo06.control;

import java.util.Comparator;
import java.util.Date;

import android.content.Context;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.preference.PreferenceManager;

import com.tdam2011.grupo06.R;
import com.tdam2011.grupo06.gui.SetPreferenceFiltrarConectividad;
import com.tdam2011.grupo06.gui.ListadoConectividad.ItemConectividadAdapter;
import com.tdam2011.grupo06.model.ItemConectividad;

public class GestorConectividad 
{
	private Context context;
	private boolean actualizar = false;
	
	public GestorConectividad(Context c)
	{
		context = c;
	}
	
	public void actualizar()
	{
		actualizar = true;
	}
	
	public ItemConectividadAdapter cargarHistorial(ItemConectividadAdapter adapter)
	{
		ItemConectividad item;
		DatabaseHelper dbH = DatabaseHelper.getInstance(context);
		SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(context);
		Comparator<ItemConectividad> comparator = getComparator();
		
		if(myPreference.getBoolean(SetPreferenceFiltrarConectividad.CONECTIVIDAD_3G, true))
    	{
			Cursor conectividad3GCur = dbH.getAllItemConectivida3G();
	        while (conectividad3GCur.moveToNext()) 
		    {
	        	int id = conectividad3GCur.getInt(conectividad3GCur.getColumnIndex(DatabaseHelper.conectividadID));
	        	int tipo = ItemConectividad.tipo3G;
		    	int accion = conectividad3GCur.getInt(conectividad3GCur.getColumnIndex(DatabaseHelper.conectividadAccion));
		    	Date fecha = new Date(conectividad3GCur.getLong(conectividad3GCur.getColumnIndex(DatabaseHelper.conectividadFechaHora)));
	    		
		    	item = new ItemConectividad(id,tipo,fecha,accion);
	 	        adapter.addItemInfo(item);
	 		}
	        conectividad3GCur.close();
    	}
		
		if(myPreference.getBoolean(SetPreferenceFiltrarConectividad.CONECTIVIDAD_WIFI, true))
    	{
			Cursor conectividadWIFICur = dbH.getAllItemConectividadWIFI();
	        while (conectividadWIFICur.moveToNext()) 
		    {
	        	int id = conectividadWIFICur.getInt(conectividadWIFICur.getColumnIndex(DatabaseHelper.conectividadID));
		    	int tipo = ItemConectividad.tipoWIFI;
		    	int accion = conectividadWIFICur.getInt(conectividadWIFICur.getColumnIndex(DatabaseHelper.conectividadAccion));
		    	Date fecha = new Date(conectividadWIFICur.getLong(conectividadWIFICur.getColumnIndex(DatabaseHelper.conectividadFechaHora)));
	    		
		    	item = new ItemConectividad(id,tipo,fecha,accion);
	 	        adapter.addItemInfo(item);
	 		}
	        conectividadWIFICur.close();
    	}
        
        if(comparator!=null)
        {
        	adapter.ordenarConectividad(comparator);
        }
        else
        {
        	adapter.ordenarConectividad(ItemConectividad.comparadorFechaDesc);
        }        
        return adapter;
	}

	public boolean verificarHistorial(ItemConectividadAdapter adapter) 
	{
		DatabaseHelper dbH = DatabaseHelper.getInstance(context);
		SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(context);
		
		if(actualizar) {actualizar = false; return true;}
		if(myPreference.getBoolean(SetPreferenceFiltrarConectividad.CONECTIVIDAD_3G, true))
    	{
			if(dbH.getItemConectividadEGCount()!=adapter.getCant3G()) {return true;}
    	}
    	if(myPreference.getBoolean(SetPreferenceFiltrarConectividad.CONECTIVIDAD_WIFI, true))
    	{
    		if(dbH.getItemConectividadWIFICount()!=(adapter.getCantWIFI())) {return true;}
    	}
		return false;
	}
	
	private Comparator<ItemConectividad> getComparator() 
	{
		SharedPreferences myPreference = PreferenceManager.getDefaultSharedPreferences(context);
    	String[] order = context.getResources().getStringArray(R.array.ordenamietoConectividad);
    	String orden = myPreference.getString("ordenamietoConectividad", "");
		int i;
    	for (i = 0; i<order.length; i++)
    	{
    		if(order[i].compareTo(orden)==0)
    		{
    			break;
    		}
    	}
    	switch (i) 
    	{
    		case 0:
    			return ItemConectividad.comparadorFechaAsc;
    		case 1:
    			return ItemConectividad.comparadorFechaDesc;
    		case 2:
    			return ItemConectividad.comparadorAccionAsc;
    		case 3:
    			return ItemConectividad.comparadorAccionDesc;
    		case 4:
    			return ItemConectividad.comparadorTipoAsc;
    		case 5:
    			return ItemConectividad.comparadorTipoDesc;
    		default:
    			return null;
		}
	}
}
